Skip to content
php是一个弱类型 脚本语言 用于web应用开发

​ php的语法和JavaScript非常接近 ​ php的语句结尾必须使用 ; 表示结束,没有则报错

概念

后端渲染

​ 访问网站时通过web服务器进行访问(apache)

​ web服务器会找到相应后端语言的编译工具 对用户的请求内容进行编译(php java虚拟机)

​ 编译 指的是将 编程语言的代码通过工具 变成 浏览器能识别的代码 (html)

​ 使用后端语言开发的网站叫做动态网站 (页面的数据是实时生成的)

因此服务器可以直接把PHP代码转换成HTML代码

使用

基本逻辑

搭建PHP框架

边界符

​ 表示在之间的内容是php代码

header响应头设置

​ 表示声明给浏览器 内容的类型

​ ("content-type:text/html;charset=utf-8") 类型是html,字符编码为UTF-8

例子
	<?php
		header("content-type:text/html;charset=utf-8");
	?>

注:json类型的响应头写法为"application/json";

引用外部PHP文件
		include(路径)

基本语法

变量

​ PHP的变量不需要声明,可以直接使用或赋值,字符前加 ' $ ' 符号,表示变量。

		$name
常量

​ 通过define的函数进行声明,开发约定常量名必须大写

		define('常量名','常量值')
函数

​ PHP的函数使用方法与JS相同,设置形参时需要在形参前加 ' $ ' 符号。

		function( $name ){语句}
字符串

​ PHP中可以使用单引号 ' '双引号 " " 表示字符串

单引号字符串使用 . 点操作符拼接变量双引号字符串可以直接识别变量名

		'你好'.$name
		"你好$name"
数组

​ php中数组的书写格式与JS不同,为关键字array加小括号

​ php中的数组分为,索引数组关联数组两种

索引数组有序排列,类似JS的数组;关联数组是哈希结构,类似JS的对象

		变量 = array(成员1,成员2,...成员N)			索引数组
		变量 = array('键'=>'值','键'=>'值')		 关联数组
引用对象属性

​ php引用对象使用 ’ -> ‘ ,类似于JS中的' . '

		对象->属性
拼接符

​ php的拼接符是 ’ . ‘ ,类似于JS中的' + '

		元素.元素

基本输出语句

echo 直接输出

​ echo输出的文字可以直接拼接在DOM内

		echo 输出内容
		print_r(输出数组)
gettype() 检测类型

整数数字integer ;小数数字double;字符串string;布尔boolean;数组array;对象(类)object;未定义NULL;资源resource

		echo gettype(被检测项)		输出被检测项的类型
var_dump() 检测并输出

​ 用于检测数据类型并输出结果

		var_dump(输出内容)

基本数据类型

null未赋值

int整数

float小数(浮点)

bool布尔

string字符串

流程控制

​ php的流程控制中的if-else、switch-case、for循环、while循环、do-while循环,与JS用法相同

foreach循环

​ 语法类似于JS中的for-of

遍历数组中的值
		foreach(数组 as 变量){
			echo 变量;
		}

函数

数组操作

count()数组长度

​ PHP中的数组没有length属性,可使用count方法代替

		count(数组)
sort()升序排序

​ 返回值,布尔值 是否排序成功

		sort(数组,新成员)
rsort()降序排序

​ 返回值,布尔值 是否排序成功

		rsort(数组,新成员)
array_push()尾部添加

​ 在数组尾部添加成员,用于索引数组

​ 返回值,数组新长度

		array_push(数组,新成员)
array_merge()合并数组

​ 将两个数组合并,用于关联数组,类似于JS中的assign对象合并

​ 返回值,新数组

		array_merge(目标数组,补充对象)
array_filter()筛选

​ 返回值,筛选后的数组

		array_filter(数组,function(参数){return 筛选条件})

json操作

json_encode()编码json

​ 对对象进行 JSON 编码

​ 返回值,JSON 编码的 string

		array_filter(对象)

注: 编码失败时返回false

json_decode()解码json

​ 接受一个 JSON 编码的字符串并且把它转换为 PHP 对象

​ 返回值,在json中编码的数据

		array_filter(JSON字符串)

注: 布尔值和null会直接返回;解码失败或超过递归限制时,返回null

表单请求操作

GET 接收数据

​ 用于接收前端发送的http请求的 GET 数据

POST 接收数据

​ 用于接收前端发送的http请求的 POST 数据

$_REQUEST[ ]接收数据

​ 用于接收前端发送的http请求的 GETPOST 数据

		$变量 = $_REQUEST['表单标签的name值']
GET和POST的区别
	1. GET请求的数据会出现在地址栏(search)中  POST不显示
	2. GET请求的数据量比POST小很多
	3. POST请求速度比GET要慢
	4. GET请求和POST请求的数据 在不同的位置发送
	   GET请求的数据 随请求头发送(显示在search)中
	   POST请求的数据 随请求体发送

其他操作

include()引入外部文件
		include(路径)
strip_tags()剥除html标签
		strip_tags(需要剥去标签的数据)
		strip_tags($_REQUEST['表单name'])		表单数据接收时剥除标签
isset()判断是否存在

​ 一般用于判断是否获得get/post数据,返回布尔值

	isset($_post['name'])	判断是否获得name的post请求
die()结束进程

​ die()表示结束当前进程,并输出内容,默认不输出

	die('进程结束')

注: 不输出内容时,括号可以省略

file_get_contents()接收数据

​ 将内容转换成字符串,可用于解决同源策略获取数据,也可用于转换json字符串

	file_get_contents(文件路径)						将文件转换成字符串
	file_get_contents('php://input')	   		   将提交的json代码转换成字符串
应用-接收json字符串,并转换
	json数据 = file_get_contents('php://input')	  接收json字符串
	json对象  = json_decode(json数据)				 将json字符串编译成json对象
	字段值 = json对象->字段名						   从json对象中,用字段名提取字段名

引用类型

mysqli()创建连接

​ mysqli是一个构造函数,代表PHP和Mysql数据库之间的创建一个连接

​ mysqli的属性和方法,使用前需要完成和MySQL的链接

	实例 = new mysqli(主机名,用户名,密码);
select_db()选择数据库
	mysqli实例->select_db('数据库')
query()执行SQL语句

​ 用于执行SQL语句或设置查询字符编码

关键字

fetch_assoc()展开一个结果集的结果

	mysqli实例->query('set names utf8');			设置查询字符的编码格式
	mysqli实例->query('SQL语句');				   执行SQL语句。返回值:结果集
	
获得结果集(展开一个)
	结果集 = mysqli实例->query('SQL语句');			 获得结果集
	结果集->fetch_assoc();						    展开一个结果
	var_dump(结果集->fetch_assoc());				打印这个结果

获得结果集(全部)
	数组 = array();								设置空数组,用来存放结果
	while(结果=结果集->fetch_assoc()){			  循环条件,结果的布尔值 结果为对象时值为ture,结果为null时值为false
		array_push(数组,结果);					   将此次循环结果加入数组
	}
	print_r(数组)									打印所有结果

注: 选择数据库前先设置查询字符的格式

num_rows结果集行数

​ 是结果集的属性,返回值,行数

	结果集行数 = mysqli实例->query('SQL语句')->num_rows
close()断开连接

​ 数据库交互结束后必须断开连接,避免造成浪费大量运行内存

	mysqli实例 = close();

同源策略

​ 出于保护数据的请求安全,一个页面无法访问跨源数据

ajax请求就是遵循同源策略的

判断同源的条件

​ 1.相同的地址(主机名/ip/域名) 2.相同的协议 3.相同的端口

注:同一个ip,使用域名和ip两种方式,也属于跨域

跨源访问的方式

JSONP前端跨源

原理

​ JSONP采用了src属性不受同源策略影响的特性(例:图片、js文件都可以跨源访问)

​ JSONP利用了script元素可以直接执行JS代码,并且不受同源策略影响的特点,向服务器发送get请求,将**数据拼接在search部分

步骤

创建script元素,并利用其特性向服务器发送请求,通过回调函数得到返回数据,最后处理这个数据
	let script = document.createElement('script');			动态创建script元素
	script.src="url?name=value&name=value";					添加script元素的src属性,并写入提交信息与回调函数
	document.body.appendChild(script);						将script元素放入页面
	function fn(data){}										设置回调函数,处理返回的信息

XHR2后端开权限

​ XHR2(CORS)后端开放跨域访问权限

​ 在PHP里设置请求头,让ajax实现跨域(这个方法不安全)

	header('Access-Control-Allow-Origin:*')					给所有人开放

反向代理

​ 使用最多 使用web服务器对请求数据进行转发实现跨域